package design.observer;

import java.util.ArrayList;
import java.util.List;

/**
 * 事件
 *
 * @author dingwen
 * @date 2022/04/23
 */
public class Event {
    /**
     * 类型
     */
    String type;
    /**
     * 监听器集合
     */
    List<Listener> listeners = new ArrayList<>();

    /**
     * 设置类型 <br>
     * <p>模拟修改一个属性通知所有的监听执行</p>
     *
     * @param type 类型
     */
    public void setType(String type) {
        this.type = type;
        notifyAllListeners();
    }

    /**
     * addListener
     *
     * @param listener 听众
     */
    public void addListener(Listener listener) {
        this.listeners.add(listener);
    }

    /**
     * 通知所有监听器
     */
    private void notifyAllListeners() {
        listeners.forEach(Listener::exec);
    }
}
